package com.springboot.config;

import com.springboot.bean.Car;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Configuration(proxyBeanMethods = false)
 * 1.表示这是一个配置类,可以配置bean对象
 * 2.proxyBeanMethods = false :使用lite模式，
 * 表示每个@Bean 方法被调用多少次返回的组件都是新创建的, 是非代理方式【即是多例的】
 */
@Configuration(proxyBeanMethods = false)
public class WebConfig {
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                /**
                 * 1.在addFormatters方法中可以增加一个自定义转换器
                 * 2.增加自定义转换器 String-->Car
                 * 3.增加自定义转换器会注册到converters容器中
                 * 4.converters容器底层结构是ConcurrentHashMap 内置有124个转换器【根据版本来说，版本不同，个数不同】
                 * 第一种写法：
                 */
                registry.addConverter(new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) { //source就是你传过来的数据---避水金睛兽,200000
                        //这里加入你的转换业务代码
                        if (!ObjectUtils.isEmpty(source)) {//如果数据不为空
                            Car car = new Car();
                            String[] split = source.split(",");
                            car.setName(split[0]);
                            car.setPrice(Double.parseDouble(split[1]));
                            return car;
                        }
                        return null;
                    }
                });
                /**
                 * 换一种写法:
                 */
                //1.先创建一个自定义转换器
//                Converter<String, Car> converter = new Converter<String, Car>() {
//                    @Override
//                    public Car convert(String source) { //source就是你传过来的数据---避水金睛兽,200000
//                        //这里加入你的转换业务代码
//                        if (!ObjectUtils.isEmpty(source)) {//如果数据不为空
//                            Car car = new Car();
//                            String[] split = source.split(",");
//                            car.setName(split[0]);
//                            car.setPrice(Double.parseDouble(split[1]));
//                            return car;
//                        }
//                        return null;
//                    }
//                };
//                //这个位置可以增加更多的转换器
//                //2.添加转换器到converters
//                registry.addConverter(converter);
            }
        };
    }
}
